home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / 3d / vb3d2 / vb_code / check.bas next >
BASIC Source File  |  1995-09-29  |  8KB  |  153 lines

  1. ' ! This is a Visual Basic BAS-file !                     '
  2. ' ******************************************************* '
  3. ' *   This module contains a function which will help   * '
  4. ' *       to avoid GPFs or other unkind events in       * '
  5. ' *             VB development environment.             * '
  6. ' ******************************************************* '
  7. '                                                         '
  8. '  As long as you are designing your code, add this new   '
  9. '        function 'IsVBenviron' to your project.          '
  10. '  Every event you want to 'switch off' while you are     '
  11. '    still testing your code will be successfully         '
  12. '                   suppressed now.                       '
  13. '                                                         '
  14. '                        + + +                            '
  15. '                                                         '
  16. ' Feel free to use this code whenever you need it.        '
  17. ' For questions (or advices) don't hesitate to e-mail me. '
  18. '                                                         '
  19. ' Code by: Christian Germelmann                           '
  20. '          35039 Marburg - Germany                        '
  21. '          CompuServe 100520,2644                                '
  22. '                                                         '
  23.  
  24. Option Explicit
  25.  
  26. Const GWW_HINSTANCE% = (-6)
  27. Const GWW_HWNDPARENT% = (-8)
  28.  
  29. Declare Function GetModuleFileName% Lib "KERNEL" Alias "#49" (ByVal hModule%, ByVal lpFilename$, ByVal nSize%)
  30. Declare Function GetWindowWord% Lib "USER" Alias "#133" (ByVal hWnd%, ByVal nIndex%)
  31.  
  32.  
  33. ' ***************************************************
  34. ' * If you are puzzled by the 'Alias' just scip it: *
  35. ' ***************************************************
  36. '
  37. 'Declare Function GetModuleFileName% Lib "KERNEL"  (ByVal hModule%, ByVal lpFilename$, ByVal nSize%)
  38. 'Declare Function GetWindowWord% Lib "USER"  (ByVal hWnd%, ByVal nIndex%)
  39.  
  40. '>>>------------------------------------------------------------------------------
  41. '                                                         '
  42. '   Adds the backslash where it is needed.                '
  43. '                                                         '
  44. '
  45. Function Backslash$ (FilePath$)
  46.     
  47.         If Right$(FilePath, 1) = "\" Then
  48.                 Backslash = FilePath
  49.             Else
  50.                 Backslash = FilePath + "\"
  51.         End If
  52.         
  53.  
  54. ' **********************************************************************
  55. ' * DO NOT USE this variation: it alters the FilePath-value itself !!! *
  56. ' *  (--> unless you definitely want this, of course !)                *
  57. ' **********************************************************************
  58. '                                                                      '
  59. '    If Right$(FilePath, 1) <> "\" Then FilePath = FilePath + "\"      '
  60. '                                                                      '
  61. '                                                                      '
  62. ' ******************************************************************
  63. ' * In case you definitely want this, you'd rather use a SUB like: *
  64. ' ******************************************************************
  65. '                                                                  '
  66. ' Sub Backslash (FilePath$)                                        '
  67. '                                                                  '
  68. '   If Right$(FilePath, 1) <> "\" Then FilePath = FilePath + "\"   '
  69. '                                                                  '
  70. ' End Sub                                                          '
  71. '                                                                  '
  72.  
  73. End Function
  74.  
  75. '>>>------------------------------------------------------------------------------
  76. ' *****************************************************************
  77. ' *    This function gleans whether the application runs under    *
  78. ' *             VB (development environment) or not.              *
  79. ' *****************************************************************
  80. '
  81. Function IsVBenviron% ()
  82.  
  83. Dim hModule%, FileBuffer$, NumberOfBytes%, ModuleFileName$, AppFileName$
  84.     
  85.     ' *************************************************************
  86.     ' * retrieve the filename of the (this !) running application *
  87.     ' *                         via API                           *
  88.     ' *************************************************************
  89.     
  90.     ' get the instance handle of the module that owns the given window
  91.     hModule = GetWindowWord(Forms(0).hWnd, GWW_HINSTANCE)
  92.     ' preset the buffer that receives the null-terminated filename
  93.     FileBuffer = Space$(128)
  94.     ' retrieve the full path and filename of the executable file
  95.     '  from which the specified module was loaded
  96.     '   --> In VB environment this is the full VB.EXE path
  97.     '       (or - not in VB environment - the app's full path)
  98.     NumberOfBytes = GetModuleFileName(hModule, FileBuffer, Len(FileBuffer))
  99.     ModuleFileName = Left$(FileBuffer, NumberOfBytes)
  100.     
  101.  
  102.     ' ***************************************************************
  103.     ' * let the running application retrieve its filename by itself *
  104.     ' *                       via VB command                        *
  105.     ' ***************************************************************
  106.  
  107.     ' Assemble the full application path using 'App.Path' and 'App.EXEName'
  108.     AppFileName = Backslash((App.Path)) + App.EXEName + ".EXE"
  109.     
  110.  
  111.     ' *************************************************************
  112.     ' *                compare the filenames finally:             *
  113.     ' *  In case they are NOT identical we are in VB environment  *
  114.     ' *     (make sure: set both filenames to the same case)      *
  115.     ' *************************************************************
  116.     
  117.     ' So it doesn't matter whether VB.EXE has a different filename
  118.     '  (as you now: you can launch a second VB instance by simply renaming VB.EXE !)
  119.     IsVBenviron = (UCase$(ModuleFileName) <> UCase$(AppFileName))
  120.  
  121. ' Additionally...                                                     '
  122. ' You could save a few bytes if you exchange the following lines:     '
  123. ' (I didn't write them above to make the code better to understand)   '
  124. '                                                                     '
  125. '  >>  ModuleFileName = Left$(FileBuffer, NumberOfBytes-4)                '
  126. '  >>  AppFileName = Backslash((App.Path)) + App.EXEName              '
  127.  
  128. End Function
  129.  
  130. '>>>------------------------------------------------------------------------------
  131. '                                                         '
  132. ' IDENTICAL with 'IsVBenviron' but without any comment !!!'
  133. ' --> So you can see how short this routine really is.    '
  134. '     (when using later, remove the 'XYZ' again)          '
  135. '                                                         '
  136. '
  137. Function IsVBenvironXYZ% ()
  138.  
  139. Dim hModule%, FileBuffer$, NumberOfBytes%, ModuleFileName$, AppFileName$
  140.      
  141.         hModule = GetWindowWord(Forms(0).hWnd, GWW_HINSTANCE)
  142.          
  143.         FileBuffer = Space$(128)
  144.         NumberOfBytes = GetModuleFileName(hModule, FileBuffer, Len(FileBuffer))
  145.         ModuleFileName = Left$(FileBuffer, NumberOfBytes - 4)
  146.          
  147.         AppFileName = Backslash((App.Path)) + App.EXEName
  148.          
  149.     IsVBenvironXYZ = (UCase$(ModuleFileName) <> UCase$(AppFileName))
  150.  
  151. End Function
  152.  
  153.